package ejb.cbm.admin.session;

import java.util.List;

import javax.persistence.EntityManager;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ejb.cbm.admin.entity.ArchivoLayoutEntity;
import ejb.cbm.admin.entity.ArchivoLayoutEntityId;
import ejb.cbm.admin.local.ArchivoLayoutSessionLocal;

////@Stateless
public class ArchivoLayoutSession extends HibernateDaoSupport implements ArchivoLayoutSessionLocal {
	
	static Logger logger = Logger.getLogger(ArchivoLayoutSession.class.getName());
	
	//property constants
	public static final String CAMPOTABLA = "campotabla";
	public static final String TIPODATO = "tipodato";
	public static final String LONGITUD = "longitud";
	public static final String FORMATO = "formato";
	public static final String FLAGACTIVO = "flagactivo";
	public static final String USUARIOREGISTRO = "usuarioregistro";
	public static final String USUARIOMODIFICACION = "usuariomodificacion";


    ////@PersistenceContext 
    //private EntityManager entityManager;
	@Autowired
	public ArchivoLayoutSession(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
    
    public void save(ArchivoLayoutEntity transientInstance) {
    	logger.log("saving ArchivoLayoutEntity instance", Level.INFO, null,null);
        try {
            getSession().persist(transientInstance);
            logger.log("save successful", Level.INFO, null,null);
        } catch (RuntimeException re) {
        	logger.log("save failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public void delete(ArchivoLayoutEntity persistentInstance) {
    	logger.log("deleting ArchivoLayoutEntity instance", Level.INFO, null,null);
        try {
            getSession().delete(persistentInstance);
            logger.log("delete successful", Level.INFO, null,null);
        } catch (RuntimeException re) {
        	logger.log("delete failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public ArchivoLayoutEntity update(ArchivoLayoutEntity detachedInstance) {
    	logger.log("updating ArchivoLayoutEntity instance", Level.INFO, null,null);
        try {
            ArchivoLayoutEntity result = (ArchivoLayoutEntity) getSession().merge(detachedInstance);
            logger.log("update successful", Level.INFO, null,null);
            return result;
        } catch (RuntimeException re) {
        	logger.log("update failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    public ArchivoLayoutEntity findById( ArchivoLayoutEntityId id) {
    	logger.log("finding ArchivoLayoutEntity instance with id: " + id, Level.INFO, null,null);
        try {
            ArchivoLayoutEntity instance = (ArchivoLayoutEntity) getSession().get(ArchivoLayoutEntity.class, id);
            return instance;
        } catch (RuntimeException re) {
        	logger.log("find failed", Level.FATAL,null, re);
            throw re;
        }
    }
    
    //@SuppressWarnings("unchecked")
    public List<ArchivoLayoutEntity> findByProperty(String propertyName, Object value) {
    	logger.log("finding ArchivoLayoutEntity instance with property: " + propertyName
    						+ ", value: " + value, Level.INFO, null,null);
		try {
			String queryString = "select model from ArchivoLayoutEntity model where model." 
			 						+ propertyName + "= :propertyValue";
			return getSession().createQuery(queryString)
 				.setParameter("propertyValue", value).list();
		} catch (RuntimeException re) {
			logger.log("find by property name failed", Level.FATAL,null, re);
			throw re;
		}
	}
	
	public List<ArchivoLayoutEntity> findByCampotabla(Object campotabla) {
		return findByProperty(CAMPOTABLA, campotabla);
	}
	
	public List<ArchivoLayoutEntity> findByTipodato(Object tipodato) {
		return findByProperty(TIPODATO, tipodato);
	}
	
	public List<ArchivoLayoutEntity> findByLongitud(Object longitud) {
		return findByProperty(LONGITUD, longitud);
	}
	
	public List<ArchivoLayoutEntity> findByFormato(Object formato) {
		return findByProperty(FORMATO, formato);
	}
	
	public List<ArchivoLayoutEntity> findByFlagactivo(Object flagactivo) {
		return findByProperty(FLAGACTIVO, flagactivo);
	}
	
	public List<ArchivoLayoutEntity> findByUsuarioregistro(Object usuarioregistro) {
		return findByProperty(USUARIOREGISTRO, usuarioregistro);
	}
	
	public List<ArchivoLayoutEntity> findByUsuariomodificacion(Object usuariomodificacion) {
		return findByProperty(USUARIOMODIFICACION, usuariomodificacion);
	}
	

	//@SuppressWarnings("unchecked")
	public List<ArchivoLayoutEntity> findAll() {
		logger.log("finding all ArchivoLayoutEntity instances", Level.INFO, null,null);
		try {
			String queryString = "select model from ArchivoLayoutEntity model";
			return getSession().createQuery(queryString).list();
		} catch (RuntimeException re) {
			logger.log("find all failed", Level.FATAL,null,re);
			throw re;
		}
	}
}